package com.company;

import java.math.BigDecimal;

/**
 * @date : 2022/7/26 9:42
 * BigDecimal的坑
 * https://mp.weixin.qq.com/s/JduY7OAeywOlVLbLiX3Xnw
 */

public class P024_BigDecimal {

    public static void main(String[] args) {
        // double 类型的两个参数相减会转换成二进制，
        // 因为 double 有效位数为16位，
        // 这就会出现存储小数位数不够的情况，
        // 这种情况下就会出现误差。
        double a = 0.02;
        double b = 0.03;
        System.out.println(b - a);
        // 使用BigDecimal的问题
        BigDecimal c = new BigDecimal(0.02);
        BigDecimal d = new BigDecimal(0.03);
        System.out.println(d.subtract(c));
        // 正确用法1
        BigDecimal e = new BigDecimal("0.02");
        BigDecimal f = new BigDecimal("0.03");
        System.out.println(f.subtract(e));
        // 正确用法2
        BigDecimal g = BigDecimal.valueOf(0.02);
        BigDecimal h = BigDecimal.valueOf(0.03);
        System.out.println(h.subtract(g));


        bigDecimalEquals();
    }


    public static void bigDecimalEquals() {
        BigDecimal bigDecimal = new BigDecimal(1);
        BigDecimal bigDecimal1 = new BigDecimal(1);
        System.out.println(bigDecimal.equals(bigDecimal1));

        BigDecimal bigDecimal2 = new BigDecimal(1);
        BigDecimal bigDecimal3 = new BigDecimal(1.0);
        System.out.println(bigDecimal2.equals(bigDecimal3));

        // 字符串的构造函数方式
        // 1   精度为0
        // 1.0 精度为1
        BigDecimal bigDecimal4 = new BigDecimal("1");
        BigDecimal bigDecimal5 = new BigDecimal("1.0");
        System.out.println(bigDecimal4.equals(bigDecimal5));
        System.out.println(bigDecimal4.compareTo(bigDecimal5) == 0);
    }
}
